package com.pingan.mybatis.encode;

import com.pingan.mybatis.utils.DESUtil;
import com.pingan.mybatis.utils.PropUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.context.ContextLoaderListener;

import javax.servlet.ServletContextEvent;

/**
 * @AUTHOR:LIUCHAO;
 * @DATE: 2020/11/27 9:24
 */
public class JdbcSafetyListener extends ContextLoaderListener {
    protected final Logger logger = LoggerFactory.getLogger(JdbcSafetyListener.class);
    // 属性需与配置文件的KEY保持一致
    private String[] encryptPropNames = { "jdbc.user", "jdbc.password", "jdbc.SITuser", "jdbc.SITpassword",
            "jdbc.PRDuser", "jdbc.PRDpassword" };

    /**
     * 初始化时加载properties配置文件
     *
     * 重写properties配置文件，为key值加密
     */
    @Override
    public void contextInitialized(ServletContextEvent event) {
        try {
            PropUtil.loadFile("jdbc.properties");
            // 配置文件为未加密状态
            if (PropUtil.getProperty("jdbc.isencoder").equals("0")) {
                for (String string : encryptPropNames) {
                    // 获取需加密字符串
                    String propertyValue = PropUtil.getProperty(string);
                    // 加密密文
//                    String encryptValue = AESUtil.getEncryptString(propertyValue);
                    String encryptValue = DESUtil.getEncryptString(propertyValue);
                    logger.info(string + "---->" + encryptValue);
                    PropUtil.setProperty(string, encryptValue);
                }
                // 设置配置文件加密状态
                PropUtil.setProperty("jdbc.isencoder", "1");
            }
        } catch (Exception e) {
            logger.error("参数加载失败");
            logger.debug(e.getMessage(), e);
        }
    }

    /**
     * 最后处理的事情
     */
    @Override
    protected void finalize() throws Throwable {
        // 关闭自动运行批处理
        super.finalize();
        logger.info("参数加载成功");
    }


}
